//引入axios依赖
import axios from "axios";
//引入nprogress插件
import nprogress from "nprogress";
//引入人家提供进度条的样式
import 'nprogress/nprogress.css';
//隐藏右上角加载小圈圈隐藏的配置
nprogress.configure({ showSpinner: false });
//利用axios对象的create方法去创建axios实例(设置请求基础路径、超时的时间)
let request = axios.create({
    //基础路径
    baseURL: '/mock',
    //超时的时间
    timeout: 5000
});

//请求拦截器:何时触发,在请求发送之前
request.interceptors.request.use((config) => {
    //config->配置对象,需要把配置对象返回,如果不返回请求都发不了
    //config配置对象身上有一个请求头属性,可以给服务器携带公共参数
    // config.headers.token = 'haoge'
    //发送请求之前进度条开始动
    nprogress.start();
    return config;
});

//响应拦截器
request.interceptors.response.use((response) => {
    //响应拦截器:成功的回调可以获取服务器的数据
    //一般可以简化数据 
    //获取服务器的数据进度条消失
    nprogress.done();
    return response.data;
}, (error) => {
    //状态码->数字
    let status = error.response.data.status;
    console.log(error);
    //情况的判断
    switch (status) {
        case 404:
            alert('请求路径错误');
            break;
        case 403:
            alert('没有权限访问');
            break;
        case 500 || 501 || 502 || 504:
            alert('硅谷服务器挂了');
            break;
    }
    //失败响应拦截器:统一处理网络错误
    return Promise.reject(new Error(error.message));
})

//对外暴露
export default request;